package com.operator.Activitys.activity;

import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
import android.provider.MediaStore;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.FileProvider;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.baidu.ocr.sdk.OCR;
import com.baidu.ocr.sdk.OnResultListener;
import com.baidu.ocr.sdk.exception.OCRError;
import com.baidu.ocr.sdk.model.IDCardParams;
import com.baidu.ocr.sdk.model.IDCardResult;
import com.baidu.ocr.ui.camera.CameraActivity;
import com.facebook.drawee.view.SimpleDraweeView;
import com.google.gson.Gson;
import com.jaredrummler.materialspinner.MaterialSpinner;
import com.operator.Activitys.R;
import com.operator.Activitys.activity.base.BaseActivity;
import com.operator.Activitys.bean.Back;
import com.operator.Activitys.bean.State;
import com.operator.Activitys.bean.UploadImage;
import com.operator.Activitys.bean.User;
import com.operator.Activitys.http.manager.UserManager;
import com.operator.Activitys.utils.Constant;
import com.operator.Activitys.utils.FileUtils;
import com.operator.Activitys.utils.FrescoUtils;
import com.operator.Activitys.utils.LogUtils;
import com.operator.Activitys.utils.ToastUtils;
import com.operator.Activitys.view.ProcessImageView;
import com.yalantis.ucrop.UCrop;

import org.simple.eventbus.EventBus;
import org.simple.eventbus.Subscriber;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import butterknife.Bind;
import butterknife.OnClick;
import io.github.lizhangqu.coreprogress.ProgressHelper;
import io.github.lizhangqu.coreprogress.ProgressUIListener;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

import static com.operator.Activitys.utils.Constant.REQUEST_CAMERA_PHOTO;
import static com.operator.Activitys.utils.Constant.REQUEST_ID_CARD_CAMERA;
import static com.operator.Activitys.utils.Constant.SHOP_CONFIRM_AUDIT;

/**
 * 项目名称：金泽云 手机app
 * 类描述：店铺认证
 * 创建人：张飞祥
 * 创建时间：2018/5/7 10:04
 * 修改人：张飞祥
 * 修改时间：2018/5/7 10:04
 * 修改备注：
 */
public class ShopConfirmActivity extends BaseActivity {

    //返回按钮
    @Bind(R.id.iv_return)
    ImageView ivReturn;
    //标题
    @Bind(R.id.tv_title)
    TextView tvTitle;
    //持卡人姓名
    @Bind(R.id.et_confirm_name)
    EditText etConfirmName;
    //选择银行
    @Bind(R.id.spinner_confirm_bank)
    MaterialSpinner spinnerConfirmBank;
    //号码类别
    @Bind(R.id.tv_number_type)
    TextView tvNumberType;
    //银行卡号
    @Bind(R.id.et_confirm_bank_number)
    EditText etConfirmBankNumber;
    //身份证 图片
    @Bind(R.id.sv_confirm_id_card)
    SimpleDraweeView svConfirmIdCard;
    @Bind(R.id.iv_ce_id_card)
    ImageView ivCeIdCard;
    @Bind(R.id.pv_confirm_id_card)
    ProcessImageView pvConfirmIdCard;
    //营业执照 图片
    @Bind(R.id.sv_confirm_mbls)
    SimpleDraweeView svConfirmMbls;
    @Bind(R.id.iv_ce_mbls)
    ImageView ivCeMbls;
    @Bind(R.id.pv_confirm_mbls)
    ProcessImageView pvConfirmMbls;
    //门头 图片
    @Bind(R.id.sv_confirm_door_head)
    SimpleDraweeView svConfirmDoorHead;
    @Bind(R.id.pv_confirm_door_head)
    ProcessImageView pvConfirmDoorHead;
    //店内景
    @Bind(R.id.sv_confirm_interior)
    SimpleDraweeView svConfirmInterior;
    @Bind(R.id.pv_confirm_interior)
    ProcessImageView pvConfirmInterior;

    //内存中用户实体
    protected User mACacheUser = null;

    //TODO 图片 获取
    //图片路径
    private String mPhotoPath;
    //SD卡路径
    private String mSdPath;
    //拍照返回 文件路径
    private File mAvatarFile;
    //图片存储 文件路径
    private File mFileUri;
    //判断 拍照 图片获取放到那个 控件上
    private int mPhotoTag = 0;

    //初始化网络请求
    public UserManager mApiManager;
    //当前选择的 back 名称
    private String mBackName = "";

    //四张图片 上传结果 返回的 Src
    private String mIdCardSrc = "", mMblsSrc = "", mDoorHeadSrc = "", mInteriorSrc = "";

    //获取身份证号
    private String mIdNumber = "";

    //提交 店铺信息 提示弹窗
    private MaterialDialog mMsgDialog;

    @Override
    protected void initUI() {
        setContentView(R.layout.act_shop_confirm);
        //网络请求接口 常驻方法
        mApiManager = mApiManager.getUserApiManager(this, this.getTaskId());
        //设置状态栏为透明
        setThemeTransparent();
        //显示返回键
        ivReturn.setVisibility(View.VISIBLE);
        //设置标题
        tvTitle.setText("店铺认证");
    }

    @Override
    protected void initData() {
        //TODO 开始获取银行卡种类
        mApiManager.userBackList();
        //获取内存用户实体
        Gson gson = new Gson();
        mACacheUser = gson.fromJson(mACache.getAsJSONObject(Constant.CACHE_USER) + "", User.class);
    }


    /**
     * 响应 银行卡种类
     */
    @Subscriber(tag = Constant.BUS_SHOP_BACK_LIST)
    public void onBackListError(List<Back> list) {
        if (list != null && list.size() != 0) {
            //新建 list 数组，把名称提取出来
            List<String> backs = new ArrayList<>();
            //循环提取数据
            for (int i = 0; i < list.size(); i++) {
                backs.add(list.get(i).getName());
            }
            //TODO 填充数据 到下拉列表中
            spinnerConfirmBank.setItems(backs);
            //设置 下拉列表最大高度
            if (backs.size() > 0)
                spinnerConfirmBank.setDropdownMaxHeight(500);

            //设置 点击默认值
            mBackName = backs.get(0);

            //TODO 列表点击事件
            //监听事件
            spinnerConfirmBank.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener<String>() {
                @Override
                public void onItemSelected(MaterialSpinner view, int position, long id, String item) {
                    //获取item点击值
                    mBackName = item;
                    //清空卡号内容
                    etConfirmBankNumber.setText("");
                    //TODO 是否当前选择了 支付宝账号
                    switch (item) {

                        case "支付宝":
                            //设置 支付宝卡号标题
                            tvNumberType.setText("账            号：");
                            //设置内容文字
                            etConfirmBankNumber.setHint("请填写您的支付宝账号");
                            break;

                        default:
                            //设置 银行卡号标题
                            tvNumberType.setText("卡            号：");
                            //设置内容文字
                            etConfirmBankNumber.setHint("请填写您的银行卡号");
                            break;
                    }
                }
            });
        }
    }

    /**
     * 响应 提交店铺信息 出错
     */
    @Subscriber(tag = Constant.BUS_SHOP_SUBMIT_ERROR)
    public void onShopSubmitError(String strError) {
        //延时 1s
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //销毁弹窗
                timeDialog.dismiss();
                //弹出提示
                ToastUtils.showShort(ShopConfirmActivity.this, "网络连接不稳定，请重试！");
            }
        }, 1000);
    }

    /**
     * 加载 提交店铺信息 返回结果
     */
    @Subscriber(tag = Constant.BUS_SHOP_SUBMIT)
    public void onShopSubmit(final State state) {
        //延时 1s
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //销毁弹窗
                timeDialog.dismiss();
                //返回值判断
                if (state.getState().equals("1"))
                    //提交成功，弹出提示框
                    initShowMsgDialog();
                else
                    ToastUtils.showShort(ShopConfirmActivity.this, state.getMsg());
            }
        }, 1000);
    }


    /**
     * 显示提示dialog
     */
    public void initShowMsgDialog() {
        //提示 dialog
        mMsgDialog = new MaterialDialog.Builder(this)
                .title("提交成功")
                .content("恭喜您，店铺信息提交成功！")
                .positiveText("我知道了")
                .onPositive(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(MaterialDialog dialog, DialogAction which) {
                        //销毁dialog
                        mMsgDialog.cancel();
                        //TODO 更新nei内存中的店铺信息 实体
                        mACacheUser.setIsCertified(SHOP_CONFIRM_AUDIT);
                        mACache.put(Constant.CACHE_USER, new Gson().toJson(mACacheUser));
                        //发送 通知 告诉 MyFragment 更新认证信息数据  "待审核"
                        EventBus.getDefault().post(SHOP_CONFIRM_AUDIT, Constant.BUS_JPUSH_SHOP_CONFIRM_TAG);
                        //销毁当前页面
                        finish();
                    }
                }).show();
        // 设置点击屏幕Dialog不消失
        mMsgDialog.setCanceledOnTouchOutside(false);
        //取消Back键监听
        mMsgDialog.setCancelable(false);
    }

    /**
     * 按钮点击事件
     *
     * @return
     */
    @OnClick({R.id.iv_return, R.id.btn_confirm, R.id.layout_confirm_id_card,
            R.id.layout_confirm_mbls, R.id.layout_confirm_door_head, R.id.layout_confirm_interior,})
    public void onClick(View view) {
        switch (view.getId()) {

            case R.id.iv_return:                   //返回按钮
                finish();
                break;

            case R.id.layout_confirm_id_card:      //身份证
                if (mPhotoTag == 0) {
                    mPhotoTag = 1;
                    getRecIdCard();
                } else {
                    ToastUtils.showShort(ShopConfirmActivity.this, "正在有图片上传，请稍等...");
                }
                break;

            case R.id.layout_confirm_mbls:         //营业执照
                if (mPhotoTag == 0) {
                    mPhotoTag = 2;
                    getImageFromPhoto();
                } else {
                    ToastUtils.showShort(ShopConfirmActivity.this, "正在有图片上传，请稍等...");
                }
                break;

            case R.id.layout_confirm_door_head:    //门头
                if (mPhotoTag == 0) {
                    mPhotoTag = 3;
                    getImageFromPhoto();
                } else {
                    ToastUtils.showShort(ShopConfirmActivity.this, "正在有图片上传，请稍等...");
                }
                break;

            case R.id.layout_confirm_interior:     //店内景
                if (mPhotoTag == 0) {
                    mPhotoTag = 4;
                    getImageFromPhoto();
                } else {
                    ToastUtils.showShort(ShopConfirmActivity.this, "正在有图片上传，请稍等...");
                }
                break;

            case R.id.btn_confirm:                 //提交按钮
                initHttpShopSubmit();
                break;
        }
    }

    /**
     * 调用 身份识别
     */
    private void getRecIdCard() {
        //创建 跳转事件
        Intent intent = new Intent(this, CameraActivity.class);
        //传入图片存储目录
        intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                FileUtils.getSaveFile(getApplication(), "shopIdCardFront.jpg").getAbsolutePath());
        //传入 身份证 type（正面 | 反面）
        intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_FRONT);
        //开始跳转
        startActivityForResult(intent, REQUEST_ID_CARD_CAMERA);
    }

    /**
     * 调用系统相机
     */
    private void getImageFromPhoto() {

        /**
         * 动态申请权限 否则不调用相机
         *
         * true： --------> 让用户手动设置 给予权限
         * flase：--------> 调用系统相机
         *
         */
        String[] PERMISSIONS_STORAGE = {
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE
        };
        int permission = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        if (permission != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, Constant.REQUEST_EXTERNAL_STORAGE);
        } else {

            //获取SD卡的路径
            mSdPath= Environment.getExternalStorageDirectory().getPath() + "/OperatorImage/";
            //获取SD卡路径 文件流
            File file=new File(mSdPath);
            if(!file.exists()){
                boolean result=file.mkdir();
                if(!result){
                    mSdPath=Environment.getExternalStorageDirectory().getPath()+"/";
                }
            };

            //设置 图片存放路径 + 文件名
            mPhotoPath = mSdPath + String.valueOf(System.currentTimeMillis()) + ".jpg";
            //获取 图片存放 文件流
            mFileUri = new File(mPhotoPath);

            //TODO 创建 页面跳转 事件
            Intent intentCamera = new Intent();
            //TODO 判断当前版本 ，设置 文件获取方式
            Uri imageUri;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                imageUri = FileProvider.getUriForFile(this, Constant.APP_CAMERA_APTH, mFileUri);
            } else {
                imageUri = Uri.fromFile(mFileUri);
            }
            //设置拍照方向
            intentCamera.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
            //设置存储路径
            intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
            //跳转 系统拍照页面
            startActivityForResult(intentCamera, REQUEST_CAMERA_PHOTO);
        }
    }

    /**
     * 提交店铺信息
     */
    private void initHttpShopSubmit() {

        //持卡人姓名
        String name = etConfirmName.getText().toString();
        //银行卡号
        String backNumber = etConfirmBankNumber.getText().toString();

        /**
         * 1.判断每个字段非空
         * 2.判断 是否 上传身份证图片
         * 3.判断 是否 上传营业执照图片
         * 4.判断 是否 上传门头图片
         * 5.判断 是否 上传店内景图片
         */
        if (name.equals("") || mBackName.equals("") || backNumber.equals("")) {
            ToastUtils.showShort(this, "请您认真填写，全部内容不许为空！");
        } else if (mIdCardSrc.equals("")) {
            ToastUtils.showShort(this, "请上传身份证图片！");
        } else if (mMblsSrc.equals("")) {
            ToastUtils.showShort(this, "请上传营业执照图片！");
        } else if (mDoorHeadSrc.equals("")) {
            ToastUtils.showShort(this, "请上传门头图片！");
        } else if (mInteriorSrc.equals("")) {
            ToastUtils.showShort(this, "请上传店内景图片！");
        } else {
            initShowTimeDialog("正在提交店铺认证信息，请稍后....", this);
            //开始 网络请求 提交店铺信息
            mApiManager.userShopSubmit(mACacheUser.getId(), backNumber, mIdNumber, name, mBackName,
                    mIdCardSrc, mMblsSrc, mDoorHeadSrc, mInteriorSrc);
        }
    }


    /**
     * 图片处理返回页面
     *
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //TODO 身份证 图片获取
        if (requestCode == REQUEST_ID_CARD_CAMERA) {
            /**
             * 这里判断下 是否确认 相应的图片
             * true： 直接跳到裁剪，开始上传
             * false：则初始化 图片上传 Tag
             */
            if (data != null && resultCode == Activity.RESULT_OK) {
                //获取身份证正反面 type
                String contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE);
                //获取身份证图片路径
                String filePath = FileUtils.getSaveFile(this, "shopIdCardFront.jpg").getAbsolutePath();
                //TODO  判断 type 是否为空
                if (!TextUtils.isEmpty(contentType)) {
                    //判断 正面
                    if (CameraActivity.CONTENT_TYPE_ID_CARD_FRONT.equals(contentType)) {
                        //识别 身份证信息
                        recIDCard(IDCardParams.ID_CARD_SIDE_FRONT, filePath);
                    }
                }
            } else {
                mPhotoTag = 0;
            }
        }

        //TODO 拍照图片 获取
        if (requestCode == REQUEST_CAMERA_PHOTO) {
            /**
             * 这里判断下 是否确认 相应的图片
             * true： 直接跳到裁剪，开始上传
             * false：则初始化 图片上传 Tag
             */
            if (resultCode == Activity.RESULT_OK) {
                //相机返回结果，调用系统裁剪
                mAvatarFile = new File(mPhotoPath);

                //TODO 传递到图片裁剪器
                /**
                 * 需要裁剪的图片路径
                 */
                Uri sourceUri = null;
                //TODO 动态申请路径
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                    sourceUri = FileProvider.getUriForFile(this, Constant.APP_CAMERA_APTH, mAvatarFile);
                } else {
                    sourceUri = Uri.fromFile(mAvatarFile);
                }

                //裁剪完毕的图片存放路径
                Uri destinationUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()) + ".jpg"));

                //TODO 创建 裁剪参数
                UCrop uCrop = UCrop.of(sourceUri, destinationUri);
                UCrop.Options options = new UCrop.Options();
                //裁剪 比例
//                uCrop.withAspectRatio(3, 2);
                //原始比例
                uCrop.useSourceImageAspectRatio();
                //是否能调整裁剪框
                options.setFreeStyleCropEnabled(true);
                //标题栏颜色
                options.setToolbarColor(ContextCompat.getColor(this, R.color.colorPrimary));
                //设置状态栏颜色
                options.setStatusBarColor(ActivityCompat.getColor(this, R.color.colorPrimaryDark));
                //标题栏 按钮颜色
                options.setToolbarWidgetColor(ContextCompat.getColor(this, R.color.color_bg_white));
                //底部控件 按钮颜色
                options.setActiveWidgetColor(ContextCompat.getColor(this, R.color.color_bg_blue));
                //圆形裁剪
                options.setCircleDimmedLayer(false);
                //添加 裁剪参数
                uCrop.withOptions(options);

                //TODO 跳转裁剪页面
                uCrop.start(this);
            } else {
                mPhotoTag = 0;
            }
        }

        //TODO 裁剪后的图片
        if (requestCode == UCrop.REQUEST_CROP) {
            /**
             * 判断 当前 是否真正的 对图片进行了裁剪
             * true：
             *        1.则获取 裁剪后 图片的地址
             *        2.判断是否为null
             *        3.添加到对应Tag的控件上
             *        4.开始上传图片文件
             *
             * false：初始化默认上传 图片 Tag
             *
             */
            if (resultCode == RESULT_OK) {
                //获取 裁剪后 图片的 Uri
                Uri resultUri = UCrop.getOutput(data);
                if (resultUri != null) {
                    /**
                     * 动态判断 显示那个View 图
                     */
                    switch (mPhotoTag) {
                        case 2:         //营业执照
                            FrescoUtils.loadAvatar(resultUri, svConfirmMbls);
                            ivCeMbls.setVisibility(View.VISIBLE);
                            pvConfirmMbls.setProgress(0);
                            break;
                        case 3:         //门头
                            FrescoUtils.loadAvatar(resultUri, svConfirmDoorHead);
                            pvConfirmDoorHead.setProgress(0);
                            break;
                        case 4:         //店内景
                            FrescoUtils.loadAvatar(resultUri, svConfirmInterior);
                            pvConfirmInterior.setProgress(0);
                            break;
                    }
                    //开始上传文件
                    uploadFile(resultUri);
                } else {
                    mPhotoTag = 0;
                }
            } else {
                mPhotoTag = 0;
            }
        }
        //TODO 裁剪图片 出错
        else if (resultCode == UCrop.RESULT_ERROR) {
            final Throwable cropError = UCrop.getError(data);
            mPhotoTag = 0;
            ToastUtils.showShort(this, "图片裁剪时出错！可能当前设备不支持裁剪！");
        }
    }

    /**
     * 身份证 识别
     *
     * @param idCardSide
     * @param filePath
     */
    private void recIDCard(String idCardSide, String filePath) {
        IDCardParams param = new IDCardParams();
        param.setImageFile(new File(filePath));
        // 设置身份证正反面
        param.setIdCardSide(idCardSide);
        // 设置方向检测
        param.setDetectDirection(true);
        // 设置图像参数压缩质量0-100, 越大图像质量越好但是请求时间越长。 不设置则默认值为20
        param.setImageQuality(20);
        //开始身份证识别
        OCR.getInstance().recognizeIDCard(param, new OnResultListener<IDCardResult>() {
            @Override
            public void onResult(IDCardResult result) {
                if (result != null && !"".equals(result.getIdNumber() + "")) {
                    //将 File 流转换 为 Uri
                    Uri uri = Uri.fromFile(FileUtils.getSaveFile(ShopConfirmActivity.this, "shopIdCardFront.jpg"));
                    //上传身份证图片
                    uploadFile(uri);
                    //加载图片到 控件上
                    FrescoUtils.loadAvatar(uri, svConfirmIdCard);
                    //显示水印
                    ivCeIdCard.setVisibility(View.VISIBLE);
                    //提取身份证号
                    mIdNumber = result.getIdNumber() + "";
                } else {
                    //初始化Tag
                    mPhotoTag = 0;
                    //消息提示
                    ToastUtils.showShort(ShopConfirmActivity.this, "不是有效的身份证图片！");
                }
            }

            @Override
            public void onError(OCRError error) {
                //初始化Tag
                mPhotoTag = 0;
                //消息提示
                ToastUtils.showShort(ShopConfirmActivity.this, "不是有效的身份证图片！");
            }
        });
    }

    /**
     * 文件上传 带进度 （okHttp）
     *
     * @param uri
     */
    private void uploadFile(final Uri uri) {
        //获取 要上传的 文件 path
        String filePath = FileUtils.getRealFilePath(ShopConfirmActivity.this, uri);
        //添加要上传的文件
        File uploadFile = new File(filePath);
        //要上传的 地址
        String url = Constant.HTTP_URL + "AuthenticationInfo/AppUploadCertifiedInfoPic";

        //TODO 创建一个 okHttp 请求
        OkHttpClient okHttpClient = new OkHttpClient();

        //TODO 创建 一个 bodyBuilder
        MultipartBody.Builder bodyBuilder = new MultipartBody.Builder();
        bodyBuilder.setType(MultipartBody.FORM);

        //文件...参数name指的是请求路径中所接受的参数...如果路径接收参数键值是file
        //此处应该改变
        bodyBuilder.addFormDataPart("file", uploadFile.getName(), RequestBody.create
                (MediaType.parse("application/octet-stream"), uploadFile));
        //构建
        MultipartBody multipartBody = bodyBuilder.build();

        //TODO  获取 上传进度
        RequestBody requestBody = ProgressHelper.withProgress(multipartBody, new ProgressUIListener() {
            @Override
            public void onUIProgressStart(long totalBytes) {
                super.onUIProgressStart(totalBytes);
                LogUtils.i("uploadFile：--------------->开始上传");
                /**
                 * 判断显示那个 上传进度View
                 */
                switch (mPhotoTag) {

                    case 1:         //身份证
                        pvConfirmIdCard.setVisibility(View.VISIBLE);
                        break;

                    case 2:         //营业执照
                        pvConfirmMbls.setVisibility(View.VISIBLE);
                        break;

                    case 3:         //门头
                        pvConfirmDoorHead.setVisibility(View.VISIBLE);
                        break;

                    case 4:         //店内景
                        pvConfirmInterior.setVisibility(View.VISIBLE);
                        break;
                }
            }

            @Override
            public void onUIProgressChanged(long numBytes, long totalBytes, final float percent, float speed) {
                /**
                 * 判断显示那个 上传进度
                 */
                switch (mPhotoTag) {

                    case 1:         //身份证
                        pvConfirmIdCard.setProgress((int) (100 * percent));
                        break;

                    case 2:         //营业执照
                        pvConfirmMbls.setProgress((int) (100 * percent));
                        break;

                    case 3:         //门头
                        pvConfirmDoorHead.setProgress((int) (100 * percent));
                        break;

                    case 4:         //店内景
                        pvConfirmInterior.setProgress((int) (100 * percent));
                        break;
                }
            }

            @Override
            public void onUIProgressFinish() {
                super.onUIProgressFinish();
                LogUtils.i("uploadFile：--------------->结束上传");
            }
        });

        //创建Request
        Request request = new Request.Builder().url(url).post(requestBody).build();

        //TODO 获取当前网络请求状态
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            //请求出错
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }

            //请求成功 返回结果
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //得到服务器返回的具体内容
                String responseData = response.body().string();
                //开始解析 转换为 实体数据
                Gson gson = new Gson();
                UploadImage image = gson.fromJson(responseData + "", UploadImage.class);
                //TODO 业务逻辑判断
                if (image.getState().equals("1")) {
                    /**
                     * 判断是 那个 Url，并相应的附上值
                     */
                    switch (mPhotoTag) {
                        case 1:         //身份证
                            mIdCardSrc = image.getSrc();
                            break;

                        case 2:         //营业执照
                            mMblsSrc = image.getSrc();
                            break;

                        case 3:         //门头
                            mDoorHeadSrc = image.getSrc();
                            break;

                        case 4:         //店内景
                            mInteriorSrc = image.getSrc();
                            break;
                    }
                    //初始化 tag
                    mPhotoTag = 0;
                } else {
                    ToastUtils.showShort(ShopConfirmActivity.this, image.getMsg());
                }
            }
        });
    }
}
